/**
 * @file 渲染进程持久性状态管理
 * @description 基于 Pinia 的持久性状态管理解决方案，支持自动持久化和多窗口同步
 *
 * ## 核心特性
 * - 💾 **自动持久化**: 状态变更自动保存到本地存储
 * - 🔄 **多窗口同步**: 状态在所有窗口间实时同步
 * - 📦 **版本管理**: 支持状态结构版本控制和迁移
 * - 🎯 **类型安全**: 完整的 TypeScript 类型支持
 * - ⚡ **高性能**: 基于 Vue 3 响应式系统优化
 *
 * @author 黄敏
 * @version 1.0.0
 * @since 2025-06-22
 */

import { CreateState } from './create-storage-state'


/**
 * 创建持久性状态管理器
 * @description 基于 Pinia 创建与主进程状态同步的响应式存储，支持自动状态同步、类型安全的访问和响应式更新
 *
 * @template Default - 状态对象类型，必须是 Record<string, unknown> 的子类型
 * @param globalName - 全局状态名称，对应主进程中的状态标识符
 * @param defaults - 默认状态值对象，定义状态的初始结构和默认值
 * @param version - 状态版本号，用于状态结构变更时的数据迁移
 * @param options - 可选配置，包含跳过默认值检查等选项
 * @returns Pinia 存储定义函数，调用后返回包含状态操作方法的存储实例
 *
 * @example
 * ```typescript
 * // 定义用户设置状态
 * const userSettingsState = createStorageState(
 *   'userSettings',
 *   {
 *     theme: 'light' as 'light' | 'dark',
 *     language: 'zh-CN',
 *     fontSize: 14,
 *     notifications: true
 *   },
 *   1
 * )
 *
 * // 在组件中使用
 * const { state, get, set } = userSettingsState.useStore()
 *
 * // 获取特定配置
 * const currentTheme = get('theme')
 *
 * // 更新配置
 * set('theme', 'dark')
 * set({ theme: 'dark', fontSize: 16 }) // 批量更新
 * ```
 */
export function createStorageState<Default extends Record<string, unknown>>(
  globalName: string,
  defaults: Default,
  version: number,
  options?: { skipDefaultsCheck?: boolean }
) {
  return new CreateState(globalName, defaults, version, options)
}
